package com.engine4cloud.tdf.admin.api.feign;

import com.engine4cloud.tdf.admin.api.dto.AreaDepartQueryDTO;
import com.engine4cloud.tdf.admin.api.entity.SysDept;
import com.engine4cloud.tdf.common.core.constant.SecurityConstants;
import com.engine4cloud.tdf.common.core.constant.ServiceNameConstants;
import com.engine4cloud.tdf.common.core.util.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author tdf
 * @date 2018/6/22
 */
@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYS_SERVICE)
public interface RemoteDeptService {

    /**
     * 获取所有部门接口
     *
     * @param parentDeptId 父部门ID
     * @return R 返回结果对象，包含所有部门信息列表
     */
    @GetMapping("/dept/list")
    R<List<SysDept>> getAllDept(@RequestParam("parentDeptId") Long parentDeptId, @RequestHeader(SecurityConstants.FROM) String from);

    /**
     * 通过部门ID获取负责人列表
     *
     * @param deptId 部门ID
     * @return 负责人ID列表
     */
    @GetMapping("/dept/leader/{deptId}")
    R<List<Long>> getAllDeptLeader(@PathVariable("deptId") Long deptId);

    /**
     * 获取子孙id列表
     *
     * @param parentId 父id
     * @return R<List < Long>>
     */
    @GetMapping("/dept/descendant")
    R<List<Long>> getDescendantIdList(@RequestParam("parentId") Long parentId, @RequestHeader(SecurityConstants.FROM) String from);

    /**
     * 根据地区编码查询机构详情
     *
     * @param dto 查询条件
     * @return R<SysDept>
     */
    @PostMapping("/dept/detail/by/code")
    R<SysDept> geDetailByOrgCode(@RequestBody AreaDepartQueryDTO dto, @RequestHeader(SecurityConstants.FROM) String from);

    /**
     * 根据部门id获取部门详情
     *
     * @param deptId 部门id
     * @return SysDept
     */
    @GetMapping("/dept/detail/{deptId}")
    R<SysDept> detail(@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM) String from);


    /**
     * 根据部门id查询部门信息
     *
     * @param ids
     * @return
     */
    @GetMapping(value = "/dept/queryDepts", headers = {SecurityConstants.HEADER_FROM_IN})
    R<List<SysDept>> queryDepts(@RequestParam List<Long> ids);

    /**
     * 查询父部门
     *
     * @param deptId 子部门id
     * @return R<SysDept>
     */
    @GetMapping("/dept/parent/{deptId}")
    R<SysDept> getParentBySonId(@PathVariable("deptId") Long deptId, @RequestHeader(SecurityConstants.FROM) String from);
}
